package com.fz.us.admin.company.dao;

import com.fz.us.admin.base.dao.BaseDao;
import com.fz.us.admin.company.entity.Company;
import com.fz.us.admin.company.entity.Department;
import com.fz.us.admin.company.entity.Post;
import com.fz.us.admin.company.entity.Power;

import java.util.List;

/**
 * Dao接口 - 职权
 * ============================================================================
 * 版权所有 2016 。
 *
 * @author fallenpanda
 * @version 1.0 2016-08-11 。
 * ============================================================================
 */
public interface PowerDao extends BaseDao<Power, String> {

    /**
     * 根据departId查找power
     * @param departId
     * @return
     */
    public List<Power> getByDepartId(String departId);

    /**
     * 根据department和post查找power
     * @param department
     * @param post
     * @return
     */
    public Power getPowerByDepartAndPost(Department department, Post post);
    /**
     * 获取公司下的所有职权列表
     *
     * @param company 企业
     * @return
     */
    public List<Power> getAllPowers(Company company);

    /**
     * 获取公司下的顶级职权列表
     *
     * @param company 企业
     * @return
     */
    public List<Power> getRootPowers(Company company);

    /**
     * 获取职权下的职权列表
     *
     * @param company 企业
     * @param power 职权
     * @return
     */
    public List<Power> getPowers(Company company, Power power);

    /**
     * 获取职权同级及上级部门职权列表
     *
     * @param company 企业
     * @param department 部门
     * @return
     */
    public List<Power> getLevelPowers(Company company, Department department);

    /**
     * 是否有下级职权
     *
     * @param power
     * @return
     */
    public boolean isParentPower(Power power);

    /**
     * 是否存在岗位
     *
     * @param post
     * @return
     */
    public boolean hasPost(Post post);

    /**
     * 是否存在部门
     *
     * @param department
     * @return
     */
    public boolean hasDepartment(Department department);

    /**
     * 通过 标识 value 获取职权（要舍弃)
     *
     * @param company
     * @return
     */
    public Power getPowerByValue(Company company, String value);

}